﻿using System;

using System.Collections.Generic;
using System.Text;

namespace PublicTransport.Helpers
{
    /// <summary>
    /// Pomocné triedy zdieľané pre celý projekt.
    /// </summary>
    public class Helper
    {

        /// <summary>
        /// Priráta k existujúcemu času ďaľšie minúty. Automaticky dodrží prechod
        /// na novú hodinu, alebo nový deň. Je NEVYHNUTNÉ použiť túto triedu pri akejkoľvek
        /// manipulácií s časom vyjadreným v celých číslach.
        /// </summary>
        /// <param name="currentTime">Súčasný čas, napríklad 8:45 je 845.</param>
        /// <param name="minutesToAdd">Koľko minút sa má pridať (môže byť viac ako hodina)</param>
        /// <returns></returns>
        public static int AddTime(int currentTime, int minutesToAdd)
        {
            int hours = (currentTime % 100 + minutesToAdd) / 60;
            currentTime += hours*100;
            currentTime += minutesToAdd - (hours * 60);
            if (currentTime / 2359 >= 1)
            {
               currentTime= currentTime - (2359 * (currentTime / 2359));
            }

            return currentTime;
        }

        private static readonly String PLAIN_ASCII_2 = "eeEErrRRtTyYuuUUiIooOOaAsSdDllLLzZcCnNaA";
        private static readonly String UNICODE_2 = "ěéĚÉřŕŘŔťŤýÝúůÚŮíÍôóÓÔáÁšŠďĎĺľĹĽžŽčČňŇäÄ";

        /// <summary>
        /// Z daného reťazca odstráni všetku diakritiku.
        /// </summary>
        /// <param name="s"></param>
        /// <returns>Reťazec s odstránenou diakritikou</returns>
        public static String RemoveAccents(String s)
        {
            if (s == null)
                return null;
            StringBuilder sb = new StringBuilder(s.Length);
            int n = s.Length;
            int pos = -1;
            char c;
            bool found = false;
            for (int i = 0; i < n; i++)
            {
                pos = -1;
                c = s[i];
                pos = (c <= 126) ? -1 : UNICODE_2.IndexOf(c);
                if (pos > -1)
                {
                    found = true;
                    sb.Append(PLAIN_ASCII_2[pos]);
                }
                else
                {
                    sb.Append(c);
                }
            }
            if (!found)
            {
                return s;
            }
            else
            {
                return sb.ToString();
            }
        }
    }
}
